package co.yixiang;

/**
 * 移动端API应用程序的主类
 * 负责启动Spring Boot应用程序，并初始化相关配置
 */
import co.yixiang.utils.SpringContextHolder;
import com.binarywang.spring.starter.wxjava.miniapp.config.WxMaAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * 启用异步方法执行，允许使用@Async注解
 */
@EnableAsync
/**
 * 启用Spring的事务管理功能，允许使用@Transactional注解
 */
@EnableTransactionManagement
/**
 * 启用Spring的缓存支持，允许使用@Cacheable等注解
 */
@EnableCaching
/**
 * 指定MyBatis的Mapper接口所在包，自动扫描并注册为Bean
 */
@MapperScan(basePackages ={"co.yixiang.modules.*.service.mapper", "co.yixiang.config"})
/**
 * 标记为Spring Boot应用程序的主类，自动配置Spring应用
 * 排除数据源自动配置和微信小程序自动配置，以便自定义配置
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class , WxMaAutoConfiguration.class})
public class ApiRun {

    /**
     * Spring Boot应用程序的入口点
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        SpringApplication.run(ApiRun.class, args);

        System.out.println("电商系统移动端API启动成功");
    }

    /**
     * 创建并注册SpringContextHolder Bean
     * SpringContextHolder用于在项目中任何地方获取Spring上下文中的Bean
     * @return SpringContextHolder实例
     */
    @Bean
    public SpringContextHolder springContextHolder() {
        return new SpringContextHolder();
    }
}

